﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cofe.Core.Validater;
using Cofe.Core;
using Cofe.Core.Property;

namespace Cofe.IO
{
    #region FileSystemInfoProperties {210-229}
    /// <summary>
    /// {210-229} A list of properties for CofeSystemInfo
    /// </summary>
    [PropertyId(210, 229)]
    public enum FileSystemInfoProperties : int
    {
        /// <summary>
        /// Get FileAttribute (clone) of the entries.
        /// </summary>
        [PropertyType(typeof(FileAttributes), typeof(int))]
        [PrimaryProperty]
        FileAttributes = 210,

        /// <summary>
        /// Get Last access time for an entries.
        /// </summary>
        [PropertyType(PropertyTypeAttribute.DateTimeDefaultEnum.Min)]
        [PrimaryProperty]
        LastAccessTimeUtc,

        /// <summary>
        /// Gets the path accessable in IO.
        /// </summary>
        [PropertyType(typeof(string))]
        [FilePath]
//#if DEBUG
//        [Alias("Debug_IOPath")]
//        [WebMetadata(false)]
//#endif
        FullName,

        /// <summary>
        /// Used by ICompressorWrapper to indicate relative path.
        /// </summary>
        [PropertyType("", typeof(string))]
        [Optional]
        RelativePath
    }
    #endregion

    #region FileInfoProperties {230-249}
    /// <summary>
    /// {230-249} A list of properties for FileInfo.
    /// </summary>
    [PropertyId(230, 249)]
    public enum FileInfoProperties : int
    {
        [PropertyType(Cofe.IO.FileAttributes.Normal, typeof(FileAttributes))]
        [WebMetadata]
        [Alias(true)]
        [Cachable(PropertyCacheOptions.Default, DatabaseCacheOptions.CachableORM)]
        FileAttributes = 230
    }
    #endregion

    #region DirectoryInfoProperties {250-269}
    /// <summary>
    /// {250-269} A list of properties for DirectoryInfo.
    /// </summary>
    [PropertyId(250, 269)]
    public enum DirectoryInfoProperties : int
    {

    }
    #endregion

    #region FileTypeInfoProperties {270-299}
     /// <summary>
    /// {270-299} A list of properties for DirectoryInfo.
    /// </summary>
    [PropertyId(270, 299)]
    public enum FileTypeInfoProperties : int
    {
        [PropertyType(typeof(string))]
        [WebMetadata]
        [Alias(false)]
        [Cachable(PropertyCacheOptions.Default, DatabaseCacheOptions.CachablePropertyPairs)]
        FileTypeDescription = 270,
        [PropertyType(typeof(string))]
        [WebMetadata]
        [Alias(false)]
        [Cachable(PropertyCacheOptions.Default, DatabaseCacheOptions.CachablePropertyPairs)]
        FileType,
        [PropertyType(typeof(string))]
        [WebMetadata]
        [Alias(false)]
        [Cachable(PropertyCacheOptions.Default, DatabaseCacheOptions.CachablePropertyPairs)]
        MIMEType
    }    
    #endregion

}
